package com.leetcode;

import java.util.HashSet;
import java.util.Set;

/**
 * 202. 快乐数
 * 使用Set存储中间计算结果, 如果陷入死循环则退出
 *
 * @author fy
 * @date 2022/4/6 14:42
 */
public class Solution202 {

    public boolean isHappy(int n) {
        Set<Integer> nums = new HashSet<>();
        while (!nums.contains(n)) {
            nums.add(n);
            n = calNum(n);
            if (n == 1) {
                return true;
            }
        }
        return false;
    }

    private int calNum(int n) {
        int sum = 0;
        while (n > 0) {
            int m = n % 10;
            sum += m * m;
            n = n / 10;
        }
        return sum;
    }

    /**
     * 另一种判断方法
     *
     * @param n
     * @return
     */
    public boolean isHappy1(int n) {
        Set<Integer> nums = new HashSet<>();
        while (n != 1 && !nums.contains(n)) {
            nums.add(n);
            n = calNum(n);
        }
        return n == 1;
    }

}
